
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>持续集成与持续部署 - 学习卡片</title>
      <style>
        body { font-family: sans-serif; background-color: #f0f8ff; color: #333; display: flex; flex-direction: column; align-items: center; padding: 50px 20px; }
        .header h1 { font-size: 32px; }
        .grid-container { display: grid; grid-template-columns: repeat(3, 1fr); gap: 28px; width: 100%; max-width: 1200px; }
        .card-container { perspective: 1200px; cursor: pointer; height: 250px; }
        .card { width: 100%; height: 100%; position: relative; transform-style: preserve-3d; transition: transform 0.7s; border-radius: 16px; box-shadow: 0 4px 16px rgba(0,0,0,0.08); }
        .card-container.flipped .card { transform: rotateY(180deg); }
        .card-face { position: absolute; width: 100%; height: 100%; backface-visibility: hidden; display: flex; flex-direction: column; box-sizing: border-box; border-radius: 16px; background-color: #fff; padding: 24px; }
        .card-back { background-color: #f0fff4; transform: rotateY(180deg); justify-content: space-between; }
        .card-category { font-size: 14px; color: #0052d9; margin-bottom: 8px; font-weight: 500; }
        .card-question { font-size: 20px; font-weight: 500; flex-grow: 1; display: flex; align-items: center; justify-content: center; text-align: center; }
        .card-answer-wrapper { flex-grow: 1; overflow-y: auto; }
        .card-answer { font-size: 15px; line-height: 1.7; }
        .card-footer { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 16px; margin-top: 16px; }
        .card-source { font-size: 13px; color: #8a919f; border-top: 1px solid #f0f0f0; padding-top: 12px; margin-top: 12px; }
      </style>
    </head>
    <body>
      <div class="header">
        <h1>持续集成与持续部署 - 学习卡片</h1>
      </div>
      <div class="grid-container">
        
    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">理论</div>
          <div class="card-question">什么是持续集成（CI）和持续部署（CD）的核心思想？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">理论</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">持续集成（CI）是指开发人员将代码频繁地合并到主分支，并通过自动化的构建与测试来验证每次提交。持续部署（CD）是指将每次代码更新自动化地部署到生产环境，确保软件可以持续交付给用户。</div>
          </div>
          <div class="card-source">来源: 1. 什么是持续集成（CI）与持续部署（CD）</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">核心概念</div>
          <div class="card-question">持续集成的三个关键要素是什么？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">核心概念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">持续集成的三个关键要素是：1. 频繁的代码提交；2. 自动化构建；3. 自动化测试。</div>
          </div>
          <div class="card-source">来源: 1.1 持续集成的关键要素</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">核心概念</div>
          <div class="card-question">持续部署的成功实施依赖于哪三个关键要素？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">核心概念</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">持续部署的关键要素包括：自动化发布、生产环境监控和快速反馈。</div>
          </div>
          <div class="card-source">来源: 1.2 持续部署的关键要素</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">技术</div>
          <div class="card-question">在持续集成流程中，通常会集成哪些静态代码分析工具来保障代码质量？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">技术</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">为了保障代码质量，团队可以集成静态代码分析工具，例如 SonarQube、Checkstyle、PMD，用以进行代码风格检查和代码复杂度分析。</div>
          </div>
          <div class="card-source">来源: 2.3 代码质量检查</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">机制</div>
          <div class="card-question">为了应对生产环境中的部署问题，可以采用哪两种可靠的回滚机制？它们是如何工作的？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">机制</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以采用蓝绿部署和灰度发布。蓝绿部署通过同时运行新旧两个版本，在出现问题时可以快速切换回旧版本。灰度发布则是将新版本逐步推送给部分用户，以验证其稳定性，减少对大规模用户的影响。</div>
          </div>
          <div class="card-source">来源: 3.2 构建可靠的回滚机制</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">优势</div>
          <div class="card-question">实施CI/CD实践能为软件开发带来哪三方面的核心优势？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">优势</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">核心优势包括：1. 提高开发效率（减少手动工作，频繁发布）；2. 提高代码质量（自动化测试和代码质量分析）；3. 降低风险（及时发现集成问题和快速应对生产问题）。</div>
          </div>
          <div class="card-source">来源: 4. 持续集成与持续部署的优势</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">挑战</div>
          <div class="card-question">在实施CI/CD时，团队可能面临哪些主要挑战？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">挑战</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">团队可能面临的主要挑战包括：1. 开发、测试和生产环境之间的一致性问题；2. 自动化测试覆盖率不足，影响软件稳定性；3. 生产环境中的部署失败风险，可能影响用户体验。</div>
          </div>
          <div class="card-source">来源: 5. 持续集成与持续部署的挑战</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">解决方案</div>
          <div class="card-question">如何解决开发、测试和生产环境不一致的问题？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">解决方案</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">可以通过两种方案解决：一是使用 Docker 等容器化技术来确保不同环境的一致性；二是通过 Terraform 等工具实现“基础设施即代码”，自动化地管理和配置基础设施。</div>
          </div>
          <div class="card-source">来源: 5.1 环境一致性问题</div>
        </div>
      </div>
    </div>

    <div class="card-container" onclick="this.classList.toggle('flipped');">
      <div class="card">
        <div class="card-face card-front">
          <div class="card-category">实践</div>
          <div class="card-question">为了更好地实施CI/CD，文档中提到了哪一项核心最佳实践？</div>
          <div class="card-footer">点击卡片查看答案</div>
        </div>
        <div class="card-face card-back">
          <div class="card-category">实践</div>
          <div class="card-answer-wrapper">
            <div class="card-answer">一项核心最佳实践是“自动化为核心”，即将构建、测试和部署过程都实现自动化，以减少人为干预，从而确保开发流程的高效性和一致性。</div>
          </div>
          <div class="card-source">来源: 6.2 自动化为核心</div>
        </div>
      </div>
    </div>

      </div>
    </body>
    </html>
